﻿using famails.App_Code.source.dto;
using famails.bus;
using famails.common;
using famails.dto;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace famails.BackEnd.Customer
{
    public partial class Products : System.Web.UI.Page
    {
        static log4net.ILog logs = log4net.LogManager.GetLogger("ErrorRollingLogFileAppender");
        static UserLoginDTO userLogin = null;
        CM_ProductBUS bus = new CM_ProductBUS();
        protected void Page_Load(object sender, EventArgs e)
        {
            userLogin = getUserLogin();
            if (!IsPostBack)
            {
                //LoadData();
                decimal id = 0;
                decimal.TryParse(Request.QueryString["id"], out id);
                if (id > 0)
                {
                    hdfProductId.Value = id + "";
                    Load4Edit(id);
                }
            }
        }

        void Load4Edit(decimal id)
        {
            try
            {
                if (id > 0)
                {
                    DataTable source = bus.GetByID(id, userLogin.UserId);
                    if (source != null && source.Rows.Count > 0)
                    {
                        hdfProductId1.Value = source.Rows[0]["GroupID"] + "";
                        txtName.Text = source.Rows[0]["ProductName"] + "";
                        txtCode.Text = source.Rows[0]["ProductCode"] + "";
                        txtPrice.Value = source.Rows[0]["Price"] + "";
                    }

                    if (source == null || source.Rows.Count == 0)
                    {
                        pnError.Visible = true;
                        lblError.Text = "Dữ liệu không tồn tại";
                        return;
                    }
                }
                if (id <= 0)
                {
                    pnError.Visible = true;
                    lblError.Text = "Dữ liệu không tồn tại";
                    return;
                }
            }
            catch (Exception ex)
            {

                pnSuccess.Visible = false;
                pnError.Visible = true;
                lblError.Text = " Đã xảy ra lỗi trong quá trình thực hiện. Vui lòng thử lại !<br/>" + ex.Message;
                logs.Error(userLogin.Username + "-Product- LoadEdit", ex);
            }
        }

        private UserLoginDTO getUserLogin()
        {
            if (Session["us-login"] != null)
            {
                return (UserLoginDTO)Session["us-login"];
            }
            else Response.Redirect("~");
            return null;
        }
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public static List<CM_ProductGroupDTO> LoadTree()
        {
            List<CM_ProductGroupDTO> result = new List<CM_ProductGroupDTO>();

            CM_ProductGroupBUS bus = new CM_ProductGroupBUS();
            DataTable source = bus.GetProductGroup(userLogin.UserId, 1);

            foreach (DataRow row in source.Rows)
            {
                CM_ProductGroupDTO dto = new CM_ProductGroupDTO();
                dto.ProductGroupName = row["ProductGroupName"] + "";
                dto.ProductGroupID = Convert.ToInt32(row["ProductGroupID"]);
                dto.CreateDate = Convert.ToDateTime(row["CreateDate"]);
                dto.children = GetChildGroup(dto.ProductGroupID, Convert.ToInt32(row["GroupStep"]) + 1);
                result.Add(dto);
            }

            return result;
        }
        static List<CM_ProductGroupDTO> GetChildGroup(int parentid, int groupstep)
        {
            CM_ProductGroupBUS bus = new CM_ProductGroupBUS();
            List<CM_ProductGroupDTO> result = new List<CM_ProductGroupDTO>();
            DataTable source = bus.GetChildGroup(parentid, groupstep, userLogin.UserId);
            foreach (DataRow row in source.Rows)
            {
                CM_ProductGroupDTO dto = new CM_ProductGroupDTO();
                dto.ProductGroupName = row["ProductGroupName"] + "";
                dto.ProductGroupID = Convert.ToInt32(row["ProductGroupID"]);
                dto.children = GetChildGroup(dto.ProductGroupID, Convert.ToInt32(row["GroupStep"]) + 1);
                result.Add(dto);
            }
            return result;
        }

        protected void btnRefesh_Click(object sender, EventArgs e)
        {
            decimal id = 0;
            decimal.TryParse(Request.QueryString["id"], out id);
            if (id == 0)
                txtCode.Text = txtPrice.Value = txtName.Text = "";
            else Load4Edit(id);
            pnError.Visible = pnSuccess.Visible = false;
        }

        protected void btnAdd_Click(object sender, EventArgs e)
        {
            pnError.Visible = false;
            pnSuccess.Visible = false;
            try
            {
                if (CheckBeforeSave())
                {
                    decimal id = 0;
                    decimal.TryParse(hdfProductId.Value, out id);
                    CM_ProductDTO dto = new CM_ProductDTO();
                    dto.ProductID = id;
                    dto.ProductName = txtName.Text;
                    dto.ProductCode = txtCode.Text;
                    dto.GroupID = Convert.ToInt32(Request.Form["groupid"]);
                    dto.Price = Convert.ToDecimal(txtPrice.Value);

                    if (id == 0)
                    {
                        dto.CreateBy = userLogin.UserId;
                        hdfProductId.Value = bus.Insert(dto) + "";
                    }
                    else bus.Edit(dto);

                    pnSuccess.Visible = true;
                    lblSuccess.Text = "Thêm mới thành công";
                    if (id > 0)
                        lblSuccess.Text = "Cập nhật thành công";
                }
            }
            catch (Exception ex)
            {
                logs.Error(userLogin.Username + "-Product - btnAdd_Click", ex);
                pnError.Visible = true;
                lblError.Text = "Lưu dữ liệu không thành công!" + ex.Message.ToString();
            }
        }

        bool CheckBeforeSave()
        {

                decimal id = 0;
            string errorMessage = "";
            if (txtName.Text == "")
                errorMessage = "Chưa nhập tên sản phẩm";
            else if (txtCode.Text == "")
                errorMessage = "Chưa nhập mã sản phẩm";
            else if (Request.Form["groupid"] + "" == "")
                errorMessage = "Chưa chọn nhóm sản phẩm";
            else if (txtCode.Text != "")
            {
                decimal.TryParse(hdfProductId.Value, out id);
                if (bus.CheckExistsCode(txtCode.Text, id, userLogin.UserId))
                    errorMessage = "Trùng mã sản phẩm";



            }
            else
            {
                id = 0;
                decimal.TryParse(txtPrice.Value, out id);
                if (id < 0)
                    errorMessage = "Giá bán không hợp lệ";
            }
            if (errorMessage.Length > 0)
            {
                pnError.Visible = true;
                lblError.Text = errorMessage;
                return false;
            }
            return true;
        }

    }
}